Фильтр по тематике

Современные 32-разрядные ARM-микроконтроллеры серии STM32. Подключение акселерометра LIS302DL к микроконтроллеру

В статье приведено описание акселерометра LIS302DL и его подключения к микроконтроллеру серии STM32 компании STMicroelectronics, а также представлены примеры программ для практического использования данного акселерометра.

01.03.2018 952 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32. Подключение акселерометра LIS302DL к микроконтроллеру

Введение

В настоящее время широкое распространение получили миниатюрные акселерометры в виде интегральных микросхем, которые позволяют измерять разность между ускорением объекта и гравитационным ускорением земли. На практике данные устройства применяются для регистрации ударных нагрузок, вибрации объектов, а также для определения ориентации объекта в пространстве.

Как правило, акселерометр представляет собой чувствительный элемент, закреплённый в упругом подвесе. Отклонение элемента от его первоначального положения при наличии ускорения позволяет измерять величину данного ускорения. По конструктивному исполнению акселерометры подразделяются на однокомпонентные, двухкомпонентные и трёхкомпонентные устройства, измеряющие ускорение вдоль одной, двух или трёх осей соответственно. Некоторые акселерометры имеют встроенные системы сбора и обработки данных, что позволяет создавать на их основе системы для измерения ускорения и вибрации со всеми необходимыми элементами.

Компания STMicroelectronics [1] производит двухкомпонентный акселерометр LIS202DL и трёхкомпонентный LIS302DL.

Описание акселерометра

Рассмотрим структуру, способ подключения и пример использования акселерометра LIS302DL. Акселерометр LIS302DL обладает следующими характеристиками:

  1. напряжение питания от 2,16 до 3,6 В;
  2. совместимость с сигналами 1,8 В;
  3. потребляемая мощность менее 1 мВт;
  4. цифровые интерфейсы связи SPI и I2C;
  5. измерение ускорения по трём осям;
  6. два диапазона измерения: ±2g и ±8g;
  7. программируемый генератор прерываний;
  8. встроенный режим самодиагно­стики;
  9. обнаружение постукиваний;
  10. распознавание одиночных и двойных постукиваний;
  11. встроенный фильтр высоких частот;
  12. стойкость к ударным воздействиям до 10 000g;
  13. размеры 3×5×0,9 мм;
  14. корпус LGA14.

На рисунке 1 показаны внешний вид акселерометра LIS302DL, направление его осей измерения ускорения и нумерация выводов.

Структурная схема акселерометра LIS302DL приведена на рисунке 2.

Назначение выводов акселерометра LIS302DL представлено в таблице 1.

Схема подключения микроконтроллера STM32 к акселерометру показана на рисунке 3.


Взаимодействие микроконтроллера с акселерометром осуществляется посредством регистров. На рисунке 4 приведена временнáя диаграмма обмена данными с акселерометром через интерфейс SPI. На этом рисунке представлены сигналы интерфейса SPI, а также разряды данных и адреса регистров акселерометра.

Разряд R/W служит для задания режима чтения и записи. Если этот разряд равен нулю, то байт данных DI7-DI0 будет записан в регистр по адресу AD5..AD0, в противном случае, при R/W, равном 1, байт данных DO7-DO0 будет прочитан из регистра по адресу AD5..AD0. Разряд M/S используется для блочного чтения и записи нескольких регистров подряд. Если этот разряд равен нулю, то после передачи адреса будет читаться или записываться один и тот же регистр для любого количества операций чтения и записи. Если этот разряд будет равен единице, то адрес будет автоматически увеличиваться на единицу после каждой операции чтения или записи.

Операции чтения и записи

Чтение одного регистра акселерометра, например с адресом 0x01, осуществляется следующим образом. Необходимо установить сигнал CS равным нулю, затем передать первый байт 0x81, который содержит адрес считываемого регистра, единичный бит R/W и нулевой бит M/S. Затем следует передать произвольный байт, для того чтобы данные регистра от акселерометра поступили через интерфейс SPI в микроконтроллер, после чего необходимо сохранить принятые данные регистра и установить высокий логический уровень на выводе CS. Для регулярного чтения одного и того же регистра можно постоянно повторять операции получения данных, не изменяя сигнал CS.

Запись одного регистра, например с адресом 0x01, производится установкой сигнала CS равным нулю, затем передаются первый байт 0x01, который содержит адрес записываемого регистра, нулевой бит R/W и нулевой бит M/S, после чего необходимо передать новое значение регистра. Завершается операция установкой высокого логического уровня на выводе CS. Для регулярной записи данных в один и тот же регистр можно постоянно повторять операции записи, не изменяя сигнал CS.

Чтение нескольких регистров акселерометра, например начиная с адреса 0x01, выполняется в следующем порядке. Сигнала CS устанавливается в нулевое состояние, затем передаются первый байт 0xC1, который содержит адрес считываемого регистра, единичный бит R/W и единичный бит M/S. После этого необходимо последовательно передать произвольный байт, для того чтобы данные регистров от акселерометра поступали через интерфейс SPI в микроконтроллер. Адреса регистров при этом будут автоматически увеличиваться на единицу. При этом необходимо сохранять принимаемые данные регистров. Для завершения чтения следует установить высокий логический уровень на выводе CS.

Запись нескольких регистров производится аналогично чтению нескольких регистров, т.е. после каждой записи адрес автоматически увеличивается на единицу. Например, для записи трёх байт 0xD1, 0xD2 и 0xD3 в регистры с адресами 0x01, 0x02 и 0x03 следует установить сигнал CS равным нулю, затем передать первый байт 0x41, который содержит адрес записываемого регистра, нулевой бит R/W и единичный бит M/S. После этого необходимо последовательно передать байты 0xD1, 0xD2 и 0xD3, которые автоматически запишутся в регистры с адресами 0x01, 0x02 и 0x03. Для завершения записи следует установить высокий логический уровень на выводе CS.

Регистры акселерометра

Рассмотрим назначение основных регистров акселерометра, при помощи которых задаются режимы его работы и производится измерение ускорений. Регистр, содержащий идентификатор акселерометра LIS302DL, имеет название WhoAmI и адрес 0x0F. Его значение можно только прочитать. При чтении данный регистр возвращает код 0x3B, который идентифицирует акселерометр как LIS302DL.

Первый регистр настройки имеет имя CTRL_REG1 и адрес 0x20. Назначение его разрядов приведено в таблице 2. В таблице рядом с именем регистра в скобках указано значение регистра по умолчанию после подачи питания или сброса. Второй регистр настройки имеет имя CTRL_REG2 и адрес 0x21. Назначение его разрядов приведено в таблице 3.

Третий регистр акселерометра служит для настройки прерываний. Он имеет имя CTRL_REG3 и адрес 0x22. Назначение его разрядов приведено в таблице 4. Сигналы FF_WU_1 и FF_WU_2 формируются двумя независимыми блоками и предназначены для генерации прерываний, в случае если ускорение по одной или нескольким осям выходит за заданный порог.

Следующий регистр HP_FILTER_RESET по адресу 0x23 называется фиктивным. Чтение этого регистра обнуляет содержимое регистров OUT_X, OUT_Y И OUT_Z внутреннего высокочастотного фильтра, т.е. значения ускорений по всем трём осям единовременно принимают значения 0g.

Регистр статуса STATUS_REG с адресом 0x27 содержит флаги, сигнализирующие об определённых событиях. Назначение флагов приведено в таблице 5.

Регистры данных с именами OUT_X, OUT_Y, OUT_Z, размещённые по адресам 0x29, 0x2B, 0x2D, содержат текущие данные измерений ускорения по осям X, Y и Z соответственно.

Акселерометр имеет два независимых модуля, которые самостоятельно читают данные из регистров OUT_X, OUT_Y, OUT_Z, и на их основе при определённых условиях генерируются прерывания. Для настройки каждого модуля используются четыре регистра, которые описаны ниже. Регистр FF_WU_CFG_1 по адресу 0x30 и регистр FF_WU_CFG_2 по адресу 0x34 позволяют настроить условия возникновения прерывания для первого и второго модуля соответственно. Назначение их разрядов приведено в таблице 6.

Регистр FF_WU_SRC_1 по адресу 0x31 и регистр FF_WU_SRC_2 по адресу 0x35 являются статусными и позволяют произвести анализ возникновения прерывания для первого и второго модуля соответственно. Назначение разрядов этих регистров приведено в таблице 7.

Регистр FF_WU_THS_1 по адресу 0x32 и регистр FF_WU_THS_2 по адресу 0x36 служат для задания порогового значения ускорения. Назначение разрядов этих регистров приведено в таблице 8.

Регистры FF_WU_DURATION_1 по адресу и FF_WU_DURATION_1 по адресу 0x37 задают минимальную продолжительность события. При частоте выборки 400 Гц регистры позволяют задавать значение от 0 до 637,5 мс с шагом 2,5 мс. При частоте выборки 100 Гц значение можно изменять в диапазоне от 0 до 2,55 с с шагом 10 мс. Назначение этих регистров проиллюстрировано временны́ми диаграммами на рисунке 5.

При возникновении физического воздействия, например при ускорении по оси X больше порогового, в акселерометре запускается счётчик. Когда значение этого счётчика достигает значения регистра FF_WU_DURATION_1 или FF_WU_DURATION_1, формируется прерывание в виде смены логического уровня на выводах INT1 или INT2 соответственно.

В случае если воздействие на акселерометр, вызывающее прерывание, непродолжительно, например ускорение уменьшилось и не достигло порогового, возможны два варианта развития событий. При сброшенном разряде DCRM счётчик обнулится и начнёт отсчёт с нуля при очередном превышении порога ускорения. Если разряд DCRM установлен в единичное состояние, то счётчик начнёт уменьшать своё значение. Таким способом осуществляется защита от ложных срабатываний. Если значение регистра FF_WU_DURATION_1 или
FF_WU_DURATION_2 равно нулю, то прерывание формируется по событию без задержек.

Остальные регистры акселерометра предназначены для настройки блока, генерирующего прерывания при одиночном или двойном ударном воздействии на акселерометр, в результате которого ускорение по какой-либо оси превышает заданный порог CLICK_THS и опускается ниже этого порога раньше времени, заданного значением CLICK_TIMELIMIT. Такие воздействия называются кликами. На рисунке 6 приведены две диаграммы при различных воздействиях ускорения на акселерометр.

На рисунке 6а видно, как ускорение плавно нарастает и превышает пороговый уровень, а затем так же плавно снижается. При этом ускорение пересекается с заданным порогом в отведённый предел времени. В таком случае формируется прерывание клика. На рисунке 6б изображён затянувшийся во времени клик: ускорение довольно медленно снижалось и пересеклось с порогом позже отпущенного времени. В данном случае прерывания клика не произошло.

Двойной клик представляет собой два одиночных клика, причём второй клик должен быть совершён до истечения временнóго окна CLICK_WINDOW с момента первого клика. На рисунке 7 показаны графики формирования прерываний для одиночного и двойного кликов при одинаковом изменении ускорения.

Регистр для выбора осей, по которым отслеживаются клики, называется CLICK_CFG и имеет адрес 0x38. Назначение его разрядов приведено в таблице 9. Если разряд LIR установлен как 1, то при чтении регистра CLICK_SRC его содержимое обнулится, а логический уровень на выводах INT1 и INT2 будет сброшен в исходное состояние. Если разряд LIR установлен как 0, то логический уровень на выводах INT1 и INT2 сбросится автоматически через интервал времени, заданный регистром CLICK_LATENCY.

Регистр CLICK_SRC по адресу 0x39 является статусным. Назначение его разрядов приведено в таблице 10.

Регистр CLICK_THSY_X по адресу 0x3B задаёт пороговые значения ускорения для осей Y и X. Если ускорение превысит установленный порог, то акселерометр активирует режим обнаружения кликов. Младшие четыре бита регистра соответствуют порогу для оси X, старшие – для оси Y. Пороговое значение ускорения можно задавать для каждой оси в диапазоне от 0 до 15. Единица в младшем разряде регистра соответствует ускорению 0,5g. Таким образом, порог ускорения может быть задан в диапазоне от 0g до 7,5g. Аналогичную функцию выполняет регистр CLICK_THSZ по адресу 0x3C. В данном регистре для задания величины порога по оси Z используются только 4 младших разряда.

Регистр CLICK_TimeLimit по адресу 0x3D служит для задания временнóго интервала, в течение которого ускорение должно успеть снизиться ниже порогового, чтобы событие клика было обнаружено. Отсчёт времени начинается после того, как ускорение по выбранной оси превысило порог. Интервал можно задавать в диапазоне от 0 до 127,5 мс с шагом 0,5 мс.

Регистр CLICK_Latency по адресу 0x3E позволяет задать временной интервал, в течение которого клики не будут детектироваться. Отсчёт времени начинается после совершения одиночного или двойного клика. Интервал можно задавать в диапазоне от 0 до 255 мс с шагом в 1 мс.

Регистр CLICK_Window по адресу 0x3F определяет максимальный промежуток между двумя кликами в диапазоне от 0 до 255 мс. Чем меньше значение этого регистра, тем быстрее должен выполняться двойной клик для возникновения прерывания.

Примеры программ

Рассмотрим несколько примеров программ, иллюстрирующих использование акселерометра. В качестве среды разработки используется IDE CooCox [2], которая распространяется бесплатно и включает в себя удобный редактор кода и отладчик.

Все приведённые далее примеры используют готовые библиотеки STM, входящие в состав среды разработки. Назначение этих библиотек понятно из их названий. Например, библиотека stm32f4xx_gpio.h служит для настройки портов GPIO, а библиотека stm32f4xx_rcc.h – для настройки часов реального времени и т.д.

В первом примере (см. листинг 1) микроконтроллер читает данные измерения ускорения из акселерометра и транслирует их в последовательный порт UART, который необходимо настроить на скорость 9600 бод с одним стоп-битом без проверки чётности.


В примерах, приведённых в листингах 2 и 3, последовательный порт UART можно не подключать, а для контроля работы использовать светодиодный индикатор, подключённый к порту PD15 микроконтроллера через ограничительный резистор 680 Ом. Пример программы в листинге 2 демонстрирует настройку прерывания от блока FF_WU_1. Программа, приведённая в листинге 3, позволяет с помощью акселерометра обнаруживать двойной клик и формировать соответствующее прерывание. Содержимое файла lib_func.c, включающего в себя библиотеку функций, используемых в приведённых выше программах, доступно в дополнительных материалах к статье на сайте www.soel.ru.

Более подробное описание акселерометра LIS302DL приведено в документации производителя [3].

Литература



Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

01.03.2018 952 0
Комментарии
Рекомендуем
К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 4. История возникновения  концепции поляритонов

К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 4. История возникновения концепции поляритонов

В прошлом году в журнале «Современная электроника» были опубликованы три статьи, посвящённые юбилею выдающегося российского физика-теоретика Игоря Евгеньевича Тамма (СОЭЛ № 7–9, 2025). В частности, были описаны современные быстродействующие электрооптические модуляторы, поверхностные состояния Тамма, запрещённые фотонные зоны и фотонные кристаллы. В этих статьях умышленно не затрагивались темы поляритонов, оптических состояний Тамма (ОСТ) и плазмон-поляритонов Тамма (ППТ). Поскольку ключевой вклад в раннюю разработку этих явлений в основном принадлежит российским учёным, целесообразно посвятить их открытию более подробные отдельные статьи. Ниже рассмотрены два основных типа гибридных фотонных частиц: экситон-поляритоны и фонон-поляритоны.  
24.04.2026 СЭ №4/2026 143 0
Телевизор с электронно-лучевой трубкой: разработки С.И. Катаева и их значение

Телевизор с электронно-лучевой трубкой: разработки С.И. Катаева и их значение

«…Наступит время… когда миллионы таких приборов, таких "электрических глаз" будут всесторонне обслуживать общественную и частную жизнь, науку, технику и промышленность…» Б. Розинг Семён Исидорович Катаев (1904–1991 гг.), советский учёный и изобретатель в области телевидения, доктор технических наук, профессор, заслуженный деятель науки и техники – незаслуженно обделён вниманием популяризаторами истории электроники и телевидения в нашей стране. Тем не менее И.С. Катаев внёс значительный вклад в развитие инженерной мысли в СССР при разработке и усовершенствовании электронно-лучевых трубок (ЭЛТ), ставших на многие годы ключевой технологией, лежащей в основе экранов телевизоров и оборудования различного назначения. Катаев дополнил изобретение Зворыкина и по праву может считаться ещё одним «отцом» отечественного телевидения. В найденных документах роль Катаева прослеживается чётко, и в статье мы хотим это показать.
23.04.2026 СЭ №4/2026 137 0
Электронные системы диагностики, стимуляции и воздействия на человека на примере BAMH и управления –  на примере AE-Skin

Электронные системы диагностики, стимуляции и воздействия на человека на примере BAMH и управления – на примере AE-Skin

Путь будущих разработок в области современной электроники пролегает от визуального отображения окружающего пространства до тактильного. В этой связи представляют интерес система Bioinspired Adaptable Multiplanar mechano-vibrotactile Haptic (BAMH) – пневматически активируемый роботизированный электронный комплекс с интерфейсом из мягкого материала и система AE-Skin, обеспечивающая интерфейс между кожей человека и физическими поверхностями. Принцип её действия достаточно известен и заложен в управлении интерактивными экранами. В первой части статьи рассматриваются особенности новых разработок в области медицинской электроники и перспективы тактильного воздействия на кожу человека для лечения и изменения настроения. Во второй части представлен подробный разбор AE-Skin и примеры её совершенствования во всех сферах жизни человека: от управления посредством электронных тактильных датчиков миниатюрной формы до устройств на основе новых технологий, воспринимающих движения руками без прикосновения и без применения пироэлектрических детекторов, как управляющие сигналы для РЭА.
17.04.2026 СЭ №4/2026 183 0

ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjdWbKyt
ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnje2F5cn
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться